Best practicing for password protection這篇文章裡,介紹了幾種常見儲存密碼的方式,從明碼到各種加密手段,最後作者從安全和效能的平衡上,也給出了他的建議。
根據文章介紹,常見的密碼儲存方法有下面幾種:
作者建議可採用「加料式雜湊法」、「複合式雜湊法之使用兩種以上的加料式雜湊演算法」或 「HMAC 加料式演算法」,這三者,越後面安全度越高,但所需的效能也越高。
加料式雜湊法是用 Hash(亂定值 + 明碼) 的方法,來避開單純用Hash編碼時,仍可能遭到字典式攻擊的風險(以MD5來說,把常用的密碼用MD5加密後拿來試,就跟明碼一樣了)。
複合式雜湊法是由「加料式雜湊法」衍生而來,有不同的變形,像是:
a. "亂定數" 使用兩次以上-亂定數 + Hash(亂定數 + 明碼)
b. 使用兩種以上的加料式雜湊演算法-MD5(SHA1(亂定數 + 明碼))
HMAC 加料式演算法則,其中一種的使用方式如:HMAC(SHA1, 亂定數 + 明碼, 金鑰值)
作者在文章中有更進一步的釋解和實作的說明,有興趣的可以進一步去了解。
最後,奉送一個警世網站「我的密碼沒加密」,希望大家的網站不要上榜。